package cn.com.project.module.dts.service;

import cn.com.project.frame.model.CommonTableReturnData;
import cn.com.project.module.dts.mapper.DtsMapper;
import cn.com.project.module.dts.model.DTSBaseInfo;
import cn.com.project.module.dts.model.DTSQueryParam;
import cn.com.project.module.dts.model.DTSStatInfo;
import cn.com.project.module.dts.model.DTSStatusEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;

/**
 * 问题单服务类
 */
@Component(value = "dtsService")
public class DtsService
{

    @Autowired
    private DtsMapper dtsMapper;

    /**
     * 分页查询问题单信息
     *
     * @param queryParam 查询参数
     * @return 查询结果
     */
    public CommonTableReturnData queryDtsInfoByPage(DTSQueryParam queryParam)
    {
        // 查询问题单总数
        int dtsCount = dtsMapper.queryDTSCount(queryParam);

        // 根据每页记录数计算当前页展示的起始和结束记录
        queryParam.calcPageNum(dtsCount);

        List<DTSBaseInfo> dstInfos = dtsMapper.queryDTSListByPage(queryParam);

        CommonTableReturnData returnData = new CommonTableReturnData();
        returnData.setRecord(dstInfos);
        returnData.setRecordCount(dtsCount);
        return returnData;
    }

    /**
     * 查询问题单统计信息
     *
     * @return 问题单统计信息
     */
    public DTSStatInfo queryDtsStatInfo(DTSQueryParam queryParam)
    {
        //根据条件查询全部的问题单
        queryParam.setPageNo(1);
        queryParam.setRecordNum(Integer.MAX_VALUE);
        List<DTSBaseInfo> dstInfos = dtsMapper.queryDTSListByPage(queryParam);
        // 遍历进行统计
        DTSStatInfo statInfo = new DTSStatInfo();
        for (DTSBaseInfo dtsInfo : dstInfos)
        {
            statInfo.setAllNum(statInfo.getAllNum() + 1);
            if (dtsInfo.getDtsStatus().equals(DTSStatusEnum.REVIEW))
            {
                statInfo.setReviewNum(statInfo.getReviewNum() + 1);
            }
            else if (dtsInfo.getDtsStatus().equals(DTSStatusEnum.DEV))
            {
                statInfo.setDevNum(statInfo.getDevNum() + 1);
            }
            else if (dtsInfo.getDtsStatus().equals(DTSStatusEnum.TESTER))
            {
                statInfo.setTesterNum(statInfo.getTesterNum() + 1);
            }
            else if (dtsInfo.getDtsStatus().equals(DTSStatusEnum.CLOSED))
            {
                statInfo.setClosedNum(statInfo.getClosedNum() + 1);
            }

            //按问题单等级统计
        }
        BigDecimal closedNum = new BigDecimal(statInfo.getClosedNum());
        BigDecimal allNum = new BigDecimal(statInfo.getAllNum());
        statInfo.setCloseRate(closedNum.divide(allNum, 2, RoundingMode.HALF_UP).doubleValue()
                * 100);
        return statInfo;
    }
}
